package com.heo.service;

import java.util.List;
import java.util.Map;

import com.github.pagehelper.Page;
import com.heo.pojo.BaseEntity;
import com.heo.util.PageBean;

/**
 * 基础service接口
 * @author penggl
 * @version 1.0
 * @date 2017-5-29
 * @param <T>
 */
public interface BaseService<T extends BaseEntity> {

	/**
	 * 查询所有
	 * @return
	 */
	List<T> listAll();
	/**
	 * 通过实体对象进行分页查询
	 * @param entity
	 * @return
	 */
	Page<T> listPageByEntity(PageBean pageBean, T entity);
	
	/**
	 * 通过实体对象通过指定sqlid进行分页查询
	 * @param pageBean
	 * @param entity
	 * @param sqlId
	 * @return
	 */
	Page<T> listPageByEntity(PageBean pageBean, T entity, String sqlId);
	
	/**
	 * 通过map对象进行分页查询
	 * @param pageBean
	 * @param paramMap
	 * @return
	 */
	Page<T> listPageByMap(PageBean pageBean, Map<String, Object> paramMap);
	
	/**
	 * 通过map对象通过指定sqlid进行分页查询
	 * @param pageBean
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	Page<T> listPageByMap(PageBean pageBean, Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 根据实体对象新增记录
	 * @param t
	 * @return
	 */
	T insert(T t) throws Exception;
	
	/**
	 * 批量保存对象
	 * @param list
	 * @return
	 */
	long insertAll(List<T> list);
	
	/**
	 * 根据对象删除
	 * @param t
	 * @return
	 */
	long delete(T t);

	/**
	 * 根据id删除对象
	 * @param id
	 * @return
	 */
	long deleteById(long id);
	
	/**
	 * 根据map对象通过指定sqlid删除对象
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	long deleteByMap(Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 修改对象
	 * @param t
	 * @return
	 */
	long update(T t);
	
	/**
	 * 根据sqlid修改
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	long updateByMap(Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 根据key获取对象
	 * @param key
	 * @return
	 */
	T getByKey(Object key);
	
	/**
	 * 根据entity对象查询
	 * @param t
	 * @return
	 */
	T getByEntity(T t);
	
	/**
	 * 根据entity对象通过指定sqlid进行查询
	 * @param t
	 * @param sqlId
	 * @return
	 */
	T getByEntity(T t, String sqlId);
	
	/**
	 * 根据map对象查询
	 * @param paramMap
	 * @return
	 */
	T getByMap(Map<String, Object> paramMap);
	
	/**
	 * 根据map对象通过指定sqlid进行查询
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	T getByMap(Map<String, Object> paramMap, String sqlId);
	
	/**
	 * 根据entity对象查询
	 * @param t
	 * @return
	 */
	List<T> listByEntity(T t);
	
	/**
	 * 根据entity对象通过指定sqlid查询
	 * @param t
	 * @param sqlId
	 * @return
	 */
	List<T> listByEntity(T t, String sqlId);
	
	/**
	 * 根据map查询对象
	 * @param paramMap
	 * @return
	 */
	List<T> listByMap(Map<String, Object> paramMap);
	
	/**
	 * 据map通过指定sqlid查询对象
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	List<T> listByMap(Map<String, Object> paramMap, String sqlId);
}
